跳到主要内容

4.6 红外接收模块

ESP32采用的是红外接收管,连接的引脚为IO7。红外接收管的主要功能为集成化的一种受光元件,其内部是将光电二极管和集成IC共同封装而成。通过红外接收管,可以将光信号(不可见光)转换成电信号,从而完成信号在空间距离上的无线传播。

(1)介绍与准备

我们需要对接收到的红外信号进行解码,还原出原始数据,需要IRremote进行处理。在Arduino IDE导航栏中点击“项目” —>“导入库” —>“管理库”,输入“IRremote”,查找选择最新版本进行安装。

alt text

图4.6.1 安装IRremote库

(2)实验代码

#include <U8g2lib.h>
#include <IRremote.h>

//设置红外信号脚
int ir_diode_pin= 7;
//配置一个红外接器
IRrecv IR(ir_diode_pin);
//存储解码后的结果
decode_results ir_decode_results;

//红外读取解码
void irRead()
{
if (IrReceiver.decode(&ir_decode_results)) //解码
{
Serial.print("红外解码:0x");
Serial.println(ir_decode_results.value, HEX); //以16进制输出红外解码值
IR.resume(); //继续接收下一个值
}
}

void setup() {
Serial.begin(9600); //串口初始化
IR.enableIRIn(); //红外初始化
}

void loop()
{
irRead(); //红外读取与处理
}

(3)实验讲解

函数说明
IR.resume()在使用decode()函数接收完红外信号后,必须使用resume()函数来重置IR接收器,才能再接收另一个红外线信号
IR.enableIRIn()红外初始化
IrReceiver.decode()接收到红外线信号

(4)实验现象

编译上传代码后,通过手机、遥控器等能发送红外信号的设备对红外接收管发送数据,在Arduino IDE的串口监视器(波特率为9600)里能看出打印不同的数据内容。

alt text

图4.6.2 串口显示接收到的红外数据